#include <atomic>
#include <iostream>
#include <thread>
#include <vector>

std::atomic<bool> ready(false);  // 原子变量，用于同步生产者和消费者
std::vector<int> data;  // 共享数据

void producer() {
    // 生产者准备数据
    data.push_back(42);    // 添加数据项
    data.push_back(1997);  // 继续添加数据项
    ready.store(true, std::memory_order_release);  // 释放顺序，发布数据
    std::cout << "Producer has published the data.\n";
}

void consumer() {
    // 消费者等待数据就绪
    while (!ready.load(std::memory_order_acquire)) {  // 获取顺序，等待数据
        std::this_thread::yield();  // 让出CPU，防止忙等
    }
    // 当从循环中出来时，保证看到生产者发布的所有写入
    std::cout << "Consumer sees the data: ";
    for (int val : data) {
        std::cout << val << " ";
    }
    std::cout << std::endl;
}

int main() {
    std::thread producerThread(producer);  // 创建生产者线程
    std::thread consumerThread(consumer);  // 创建消费者线程

    producerThread.join();  // 等待生产者线程结束
    consumerThread.join();  // 等待消费者线程结束

    return 0;
}